From 3a214a63dd030c1a73726b34b6d4a7424ca735ff Mon Sep 17 00:00:00 2001 From: "kaf24@scramble.cl.cam.ac.uk" Date: Fri, 26 Mar 2004 17:08:45 +0000 Subject: [PATCH] bitkeeper revision 1.825.3.6 (4064639dGSejbtZOrnsOB_IspAZ6kw) blkdev.h, pci.c, Makefile, domain.c, setup.c, entry.S, Rules.mk: Allow Xen to be built without device drivers using 'nodev=y make'. --- xen/Rules.mk | 9 +++++++++ xen/arch/i386/entry.S | 4 ++++ xen/arch/i386/setup.c | 2 ++ xen/common/domain.c | 2 ++ xen/drivers/Makefile | 12 +++++++----- xen/drivers/pci/pci.c | 6 ++++++ xen/include/xen/blkdev.h | 6 ++++++ 7 files changed, 36 insertions(+), 5 deletions(-) diff --git a/xen/Rules.mk b/xen/Rules.mk index bd6936566d..da2d24cdda 100644 --- a/xen/Rules.mk +++ b/xen/Rules.mk @@ -1,6 +1,8 @@ COMPILE_ARCH := $(shell uname -m | sed -e s/i.86/i386/) TARGET_ARCH ?= $(COMPILE_ARCH) +nodev ?= n + TARGET := $(BASEDIR)/xen HDRS := $(wildcard $(BASEDIR)/include/xen/*.h) HDRS += $(wildcard $(BASEDIR)/include/scsi/*.h) @@ -20,11 +22,13 @@ ALL_OBJS += $(BASEDIR)/net/network.o ALL_OBJS += $(BASEDIR)/drivers/char/driver.o ALL_OBJS += $(BASEDIR)/drivers/pci/driver.o ALL_OBJS += $(BASEDIR)/drivers/net/driver.o +ifneq ($(nodev),y) ALL_OBJS += $(BASEDIR)/drivers/block/driver.o ALL_OBJS += $(BASEDIR)/drivers/cdrom/driver.o ALL_OBJS += $(BASEDIR)/drivers/ide/driver.o ALL_OBJS += $(BASEDIR)/drivers/scsi/driver.o ALL_OBJS += $(BASEDIR)/drivers/message/fusion/driver.o +endif ALL_OBJS += $(BASEDIR)/arch/$(TARGET_ARCH)/arch.o HOSTCC = gcc @@ -32,6 +36,11 @@ HOSTCFLAGS = -Wall -Wstrict-prototypes -O2 -fomit-frame-pointer include $(BASEDIR)/arch/$(TARGET_ARCH)/Rules.mk +ifeq ($(nodev),y) +CFLAGS += -DNO_DEVICES_IN_XEN +CFLAGS := $(subst -Werror,,$(CFLAGS)) +endif + %.o: %.c $(HDRS) Makefile $(CC) $(CFLAGS) -c $< -o $@ diff --git a/xen/arch/i386/entry.S b/xen/arch/i386/entry.S index 8db1f20074..eab11e5ad8 100644 --- a/xen/arch/i386/entry.S +++ b/xen/arch/i386/entry.S @@ -712,7 +712,11 @@ ENTRY(hypervisor_call_table) .long SYMBOL_NAME(do_sched_op) .long SYMBOL_NAME(do_dom0_op) .long SYMBOL_NAME(do_network_op) /* 10 */ +#ifndef NO_DEVICES_IN_XEN .long SYMBOL_NAME(do_block_io_op) +#else + .long SYMBOL_NAME(do_ni_syscall) +#endif .long SYMBOL_NAME(do_set_debugreg) .long SYMBOL_NAME(do_get_debugreg) .long SYMBOL_NAME(do_update_descriptor) diff --git a/xen/arch/i386/setup.c b/xen/arch/i386/setup.c index 06271e3b46..318d8cff90 100644 --- a/xen/arch/i386/setup.c +++ b/xen/arch/i386/setup.c @@ -420,7 +420,9 @@ void __init start_of_day(void) if ( !setup_network_devices() ) panic("Must have a network device!\n"); net_init(); /* initializes virtual network system. */ +#ifndef NO_DEVICES_IN_XEN initialize_block_io(); /* setup block devices */ +#endif #ifdef CONFIG_SMP wait_init_idle = cpu_online_map; diff --git a/xen/common/domain.c b/xen/common/domain.c index 0783f7f838..5be1be9b06 100644 --- a/xen/common/domain.c +++ b/xen/common/domain.c @@ -822,6 +822,7 @@ int setup_guestos(struct task_struct *p, dom0_createdomain_t *params, write_cr3_counted(pagetable_val(current->mm.pagetable)); __sti(); +#ifndef NO_DEVICES_IN_XEN /* DOM0 gets access to all real block devices. */ #define MAX_REAL_DISKS 256 xd = kmalloc(MAX_REAL_DISKS * sizeof(xen_disk_t), GFP_KERNEL); @@ -843,6 +844,7 @@ int setup_guestos(struct task_struct *p, dom0_createdomain_t *params, BUG(); } kfree(xd); +#endif /* DOM0 gets access to everything. */ physdev_init_dom0(p); diff --git a/xen/drivers/Makefile b/xen/drivers/Makefile index 2d969e41be..902add28e5 100644 --- a/xen/drivers/Makefile +++ b/xen/drivers/Makefile @@ -3,11 +3,13 @@ default: $(MAKE) -C char $(MAKE) -C pci $(MAKE) -C net - $(MAKE) -C block - $(MAKE) -C cdrom - $(MAKE) -C ide - $(MAKE) -C scsi - $(MAKE) -C message/fusion + if [ "$(nodev)" != "y" ]; then \ + $(MAKE) -C block ; \ + $(MAKE) -C cdrom ; \ + $(MAKE) -C ide ; \ + $(MAKE) -C scsi ; \ + $(MAKE) -C message/fusion ; \ + fi clean: $(MAKE) -C char clean diff --git a/xen/drivers/pci/pci.c b/xen/drivers/pci/pci.c index c6e9c47ad8..fa606c7fbc 100644 --- a/xen/drivers/pci/pci.c +++ b/xen/drivers/pci/pci.c @@ -656,6 +656,7 @@ out: int pci_register_driver(struct pci_driver *drv) { +#ifndef NO_DEVICES_IN_XEN struct pci_dev *dev; int count = 0; @@ -665,6 +666,9 @@ pci_register_driver(struct pci_driver *drv) count += pci_announce_device(drv, dev); } return count; +#else + return 0; +#endif } /** @@ -680,6 +684,7 @@ pci_register_driver(struct pci_driver *drv) void pci_unregister_driver(struct pci_driver *drv) { +#ifndef NO_DEVICES_IN_XEN struct pci_dev *dev; list_del(&drv->node); @@ -690,6 +695,7 @@ pci_unregister_driver(struct pci_driver *drv) dev->driver = NULL; } } +#endif } #ifdef CONFIG_HOTPLUG diff --git a/xen/include/xen/blkdev.h b/xen/include/xen/blkdev.h index c3dbc32b2f..b53f1e645b 100644 --- a/xen/include/xen/blkdev.h +++ b/xen/include/xen/blkdev.h @@ -26,9 +26,15 @@ typedef struct { extern kdev_t xendev_to_physdev(unsigned short xendev); +#ifndef NO_DEVICES_IN_XEN extern void init_blkdev_info(struct task_struct *); extern void unlink_blkdev_info(struct task_struct *); extern void destroy_blkdev_info(struct task_struct *); +#else +#define init_blkdev_info(_p) ((void)0) +#define unlink_blkdev_info(_p) ((void)0) +#define destroy_blkdev_info(_p) ((void)0) +#endif extern int unregister_blkdev(unsigned int, const char *); extern int invalidate_device(kdev_t, int); -- 2.30.2